home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / mint / mint96sb.zoo / src / quickmov.spp < prev    next >
Encoding:
Text File  |  1992-10-05  |  1.6 KB  |  60 lines

  1. ;
  2. ; quickmove(char *dst, char *src, long nbytes):
  3. ; quickly copy "nbytes" bytes from src to dst. Assumes that both
  4. ; src and dst are word aligned.
  5. ;
  6.     TEXT
  7.  
  8.     XDEF    _quickmove
  9.  
  10. _quickmove:
  11.     move.l    4(sp),a0        ; get dst
  12.     move.l    8(sp),a1        ; get src
  13.     move.l    12(sp),d0        ; get nbytes
  14.     lsr.l    #8,d0            ; 
  15.     lsr.l    #1,d0            ; d0 = nbytes / 512
  16.     subq.l    #1,d0            ; prepare for dbra loop
  17.     bmi.s    Leftover        ; if < 0, skip
  18.     movem.l    d1-d7/a2-a6,-(sp)    ; save regs
  19. L1:
  20.     movem.l    (a1)+,d1-d7/a2-a6    ; read 12*4 = 48 bytes
  21.     movem.l    d1-d7/a2-a6,(a0)    ;
  22.     movem.l    (a1)+,d1-d7/a2-a6    ; 2nd read
  23.     movem.l    d1-d7/a2-a6,48(a0)    ;
  24.     movem.l    (a1)+,d1-d7/a2-a6    ; 3rd read
  25.     movem.l    d1-d7/a2-a6,96(a0)    ;
  26.     movem.l    (a1)+,d1-d7/a2-a6    ; 4th read
  27.     movem.l    d1-d7/a2-a6,144(a0)    ;
  28.     movem.l    (a1)+,d1-d7/a2-a6    ; 5th
  29.     movem.l    d1-d7/a2-a6,192(a0)    ;
  30.     movem.l    (a1)+,d1-d7/a2-a6    ; 6th
  31.     movem.l    d1-d7/a2-a6,240(a0)    ;
  32.     movem.l    (a1)+,d1-d7/a2-a6    ; 7th
  33.     movem.l    d1-d7/a2-a6,288(a0)    ;
  34.     movem.l    (a1)+,d1-d7/a2-a6    ; 8th
  35.     movem.l    d1-d7/a2-a6,336(a0)    ;
  36.     movem.l    (a1)+,d1-d7/a2-a6    ; 9th
  37.     movem.l    d1-d7/a2-a6,384(a0)    ;
  38.     movem.l    (a1)+,d1-d7/a2-a6    ; 10th
  39.     movem.l    d1-d7/a2-a6,432(a0)    ; At this point, 480 bytes done
  40.     movem.l    (a1)+,d1-d7/a2        ; Only do 32 more bytes
  41.     movem.l    d1-d7/a2,480(a0)    ; for a total of 512
  42.  
  43.     lea    512(a0),a0
  44.     subq.l    #1,d0
  45.     bge.s    L1
  46.  
  47.     movem.l    (sp)+,d1-d7/a2-a6    ; pop registers
  48.  
  49. Leftover:                ; do the remaining bytes
  50.     move.l    12(sp),d1
  51.     and.l    #$01ff,d1        ; d1 = nbytes % 512
  52.     subq.l    #1,d1            ; prepare for dbra loop
  53.     bmi.s    Ldone
  54. L2:
  55.     move.b    (a1)+,(a0)+
  56.     dbra    d1,L2
  57. Ldone:
  58.     rts                ; return
  59.     END
  60.